import axios from 'axios';
import { store } from '@/store/store';
import { message } from 'antd';
import { logout } from '@/store/actions';
import { customeHistory } from './history';

// 创建 axiso 实例并导出
export const http = axios.create({
  // baseURL: 'http://geek.itheima.net/v1_0',
  baseURL: 'http://toutiao.itheima.net/v1_0',
  timeout: 5000,
});

// 配置请求拦截器
http.interceptors.request.use((config) => {
  // config 每次请求的请求相关的所有配置
  // console.log('interceptors request', config);

  const token = store.getState().login;

  // 修改config的参数配置，除了登录请求之外，都加上token
  if (!config.url.startsWith('/authorizations')) {
    config.headers.Authorization = `Bearer ${token}`;
  }

  // 别忘了饭回config
  return config;
});

// 配置响应拦截器
http.interceptors.response.use(undefined, (error) => {
  // console.log('响应错误', error);

  // 1、用户的请求就没有发出来
  if (!error.response) {
    message.warn('网络错误，请检查网络配置');
    return Promise.reject(error);
  }

  // 2、token 过期，token错误
  if (error.response.status === 401) {
    // 第一种，用户需要多一步操作
    // message.warn('token 认证失败，请刷新浏览器后，重新登录');
    // // 清除token
    // store.dispatch(logout());
    // 第二种实现方式，token过期，自动跳转到login页面
    message.warn('token 认证失败', 1, () => {
      // 警告提示框消失后执行
      customeHistory.push('/login', {
        from: customeHistory.location.pathname,
      });
    });
    return Promise.reject(error);
  }

  return Promise.reject(error);
});
